package io.airlift.airship.coordinator; import com.google.common.base.Charsets; import com.google.common.collect.ImmutableListMultimap; import com.google.common.collect.ListMultimap; import com.google.common.io.CountingInputStream; import com.google.common.net.HttpHeaders; import com.google.common.net.MediaType; import io.airlift.airship.shared.AgentStatusRepresentation; import io.airlift.http.client.HttpStatus; import io.airlift.http.client.Request; import io.airlift.http.client.Response; import io.airlift.json.JsonCodec; import org.testng.annotations.Test; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URI; import java.util.List; import static io.airlift.airship.coordinator.ValidatingResponseHandler.validate; import static io.airlift.http.client.JsonResponseHandler.createJsonResponseHandler; import static io.airlift.http.client.Request.Builder.prepareGet; public class TestValidatingResponseHandler { @Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = ".*agentId=may not be null.*") public void testValidate() { JsonCodec<AgentStatusRepresentation> agentCodec = JsonCodec.jsonCodec(AgentStatusRepresentation.class); Request request = prepareGet().setUri(URI.create("http://localhost/")).build(); Response response = fakeJsonResponse("{}"); validate(createJsonResponseHandler(agentCodec)).handle(request, response); } private static Response fakeJsonResponse(String json) { InputStream input = new ByteArrayInputStream(json.getBytes(Charsets.UTF_8)); final CountingInputStream countingInputStream = new CountingInputStream(input); return new Response() { @Override public int getStatusCode() { return HttpStatus.OK.code(); } @Override public String getStatusMessage() { return HttpStatus.OK.reason(); } @Override public String getHeader(String name) { List<String> list = getHeaders().get(name); return list.isEmpty() ? null : list.get(0); } @Override public ListMultimap<String, String> getHeaders() { return ImmutableListMultimap.<String, String>builder() .put(HttpHeaders.CONTENT_TYPE, MediaType.JSON_UTF_8.toString()) .build(); } @Override public long getBytesRead() { return countingInputStream.getCount(); } @Override public InputStream getInputStream() throws IOException { return countingInputStream; } }; } }